﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Resources;
using System.Data.Linq;
using System.Linq;
using CDStore3Tiers;

namespace CuaHangDiaNhac
{
	public partial class frmNhapHang : DevComponents.DotNetBar.Metro.MetroForm
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Nhập hàng");
		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 601))
			{
				btnThemBH.Enabled = true;
				btnThem.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 602))
			{
				btnXoa.Visible = true;
				tsDelete.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 603))
			{
				tsSave.Enabled = true;
				btnSave.Visible = true;
			}
		}

		public void closeall()
		{
			tsDelete.Enabled = false;
			tsSave.Enabled = false;
			btnThemBH.Enabled = false;
			btnSave.Visible = false;
			btnThem.Visible = false;
			btnXoa.Visible = false;
		}


		public frmNhapHang()
		{
			InitializeComponent();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
		}

		XuLyNhapHang XLNH = new XuLyNhapHang();
		//StoreCDDataContext st = new StoreCDDataContext();
		XuLyForm XL = new XuLyForm();
		StoreCDDataContext db;
		DataGridViewTextBoxColumn coMaNH;
		DataGridViewTextBoxColumn coTimeNH;
		DataGridViewTextBoxColumn coTongTien;
		DataGridViewTextBoxColumn coNV;
		public void LoadDS()
		{
			var nhaphang = db.NhapHang_SelectAll();
			BindingSource nh = new BindingSource();
			nh.DataSource = nhaphang;
			bindingNavigator1.BindingSource = nh;
			dgv.DataSource = nh;
		}

		public void loadDGV()
		{
			dgv.DataSource = null;

			coMaNH = new DataGridViewTextBoxColumn();
			coMaNH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coMaNH.DataPropertyName = "MaNH";
			coMaNH.HeaderText = "Mã nhập hàng";
			coMaNH.Name = "cMaNH";
			// coMaNH.Visible = false;
			dgv.Columns.Add(coMaNH);


			coTimeNH = new DataGridViewTextBoxColumn();
			coTimeNH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coTimeNH.DataPropertyName = "ThoiGianNhapHang";
			coTimeNH.HeaderText = "Thời gian nhập hàng";
			coTimeNH.Name = "cTimeNH";
			dgv.Columns.Add(coTimeNH);


			coTongTien = new DataGridViewTextBoxColumn();
			coTongTien.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coTongTien.DataPropertyName = "TongTienNhap";
			coTongTien.HeaderText = "Tổng tiền";
			coTongTien.Name = "cTongTien";
			dgv.Columns.Add(coTongTien);


			coNV = new DataGridViewTextBoxColumn();
			coNV.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			coNV.DataPropertyName = "NhanVienNhapHang";
			coNV.HeaderText = "Nhân viên nhập";
			coNV.Name = "cNV";
			dgv.Columns.Add(coNV);


			LoadDS();

		}

		private void frmNhapHang_Activated(object sender, EventArgs e)
		{
			loadDGV();
			dtiTimeNH.Value = DateTime.Now;
		}

		private void tsRefesh_Click(object sender, EventArgs e)
		{
			loadDGV();
			log.Info(frmLogin.id + ": đã làm mới danh sách nhập hàng");
		}

		private void tsDelete_Click(object sender, EventArgs e)
		{
			string listnh = "";
			NhapHang nh = new NhapHang();
			if (dgv.SelectedRows.Count > 0)
			{
				foreach (DataGridViewRow r in dgv.SelectedRows)
				{
					int ma = Convert.ToInt32(r.Cells["cMaNH"].Value.ToString());
					listnh += "\nMã số: " + ma;
				}
				DialogResult z = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc chắn muốn xóa (những) nhập hàng này ?" + listnh, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
				if (z == DialogResult.Yes)
				{
					foreach (DataGridViewRow r in dgv.SelectedRows)
					{
						int ma = Convert.ToInt32(r.Cells["cMaNH"].Value.ToString());
						var del = db.NhapHang_Delete(ma);
						db.SubmitChanges();
						loadDGV();
						log.Info(frmLogin.id + ": đã xóa nhập hàng mã số [" + ma + "]");
					}
					DevComponents.DotNetBar.MessageBoxEx.Show("Xóa (các) nhập hàng dã chọn thành công");
				}
			}
		}

		private void tsSave_Click(object sender, EventArgs e)
		{
			try
			{
				XLNH.updateNhapHang(dgv);
				log.Info(frmLogin.id + ": lưu các dữ liệu thay đổi thành công");
			}
			catch (Exception Ex)
			{
				DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": lưu các dữ liệu thay đổi thất bại");
			}
			loadDGV();
		}

		private void btnThemBH_Click(object sender, EventArgs e)
		{
			NhapHang nh = new NhapHang();
			try
			{
				nh.ThoiGianNhapHang = Convert.ToDateTime(dtiTimeNH.Value.ToShortDateString());
				nh.TongTienNhap = Convert.ToDecimal(txtTongTien.Text.ToString());
				nh.NhanVienNhapHang = frmLogin.id;
				db.NhapHangs.InsertOnSubmit(nh);
				db.SubmitChanges();
				DevComponents.DotNetBar.MessageBoxEx.Show("Thêm nhập hàng thành công!");
				log.Info(frmLogin.id + ": thêm nhập hàng mã số [" + XLNH.GetlastNH() + "]");
			}
			catch (Exception Ex)
			{
				//db.Transaction.Rollback();
				DevComponents.DotNetBar.MessageBoxEx.Show(Ex.Message, "Xảy ra lỗi trong quá trình thêm nhập hàng!", MessageBoxButtons.OK, MessageBoxIcon.Error);
				log.Error(frmLogin.id + ": thêm nhập hàng thất bại");
			}


			loadDGV();
		}
		private void dgv_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;
			hit = dgv.HitTest(e.X, e.Y);

			//đối tượng cho biết thông tin hit trên datagridview
			if (e.Button == MouseButtons.Right)
			{ //bắt sự kiện chuột phải
				//tạo đối tượng HTi
				if (hit.Type == DataGridViewHitTestType.Cell)
				{//Kiểm tra xem đối tượng HTi có đúng là kiểu Cell không
					if (!((DataGridViewRow)(dgv.Rows[hit.RowIndex])).Selected)
					{//kiểm tra xem row tại vị trí chuột có đúng là chưa chọn
						dgv.ClearSelection();//xóa chọn tất cả trên datagrid
						((DataGridViewRow)dgv.Rows[hit.RowIndex]).Selected = true;//xác lập chọn cho row tại vị trí nhấn chuột                      
					}
				}
			}
			if (dgv.SelectedRows.Count > 1)
				lockContextmenu(false);
			else
			{
				lockContextmenu(true);
				//DevComponents.DotNetBar.MessageBoxEx.Show(e.X + "  " + e.Y);
			}
		}

		private void lockContextmenu(bool p)
		{
			btnF5.Enabled = p;
			btnSave.Enabled = p;
			btnThem.Enabled = p;
			btnXoa.Enabled = p;
		}

		private void btnThem_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
			log.Info(frmLogin.id + ": đã chọn chức năng thêm nhập hàng");
		}

		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			dgv.DataSource = from n in db.NhapHangs
							 where n.MaNH.ToString().ToLower().Contains(tsTimkiem.Text.ToLower())
								 || n.ThoiGianNhapHang.Value.Year.ToString().Contains(tsTimkiem.Text.ToLower())
								 || n.ThoiGianNhapHang.Value.Month.ToString().Contains(tsTimkiem.Text.ToLower())
								 || n.ThoiGianNhapHang.Value.Day.ToString().Contains(tsTimkiem.Text.ToLower())
								 || n.ThoiGianNhapHang.Value.ToString().Contains(tsTimkiem.Text.ToLower())

							 select n;
		}

		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}

		private void tsTimkiem_MouseLeave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Tìm kiếm theo mã nhập hàng, ngày tháng năm";
				XL.loadDGV(bindingNavigator1, dgv, null);
				loadDGV();
			}
		}

		private void frmNhapHang_Load(object sender, EventArgs e)
		{
			closeall();
            bindingNavigator1.BackColor = Color.FromArgb(0,192,0);
			lockLogin();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			log.Info(frmLogin.id + ": đã load lên form nhập hàng");
		}


	}
}
